\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage[section]{placeins}
\usepackage{fancyhdr}
\usepackage{hyperref} 
\hypersetup{
     backref=true,    %permet d'ajouter des liens dans...
     pagebackref=true,%...les bibliographies
     hyperindex=true, %ajoute des liens dans les index.
     colorlinks=true, %colorise les liens
     breaklinks=true, %permet le retour à la ligne dans les liens trop longs
     urlcolor= blue,  %couleur des hyperliens
     linkcolor= blue %couleur des liens internes
}

%%%% debut macro pour enlever le nom chapitre %%%%
\makeatletter
\def\@makechapterhead#1{%
  \vspace*{20\p@}%
  {\parindent \z@ \raggedright \normalfont
    \interlinepenalty\@M
    \ifnum \c@secnumdepth >\m@ne
        \Huge\bfseries \thechapter\quad
    \fi
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}

\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \Huge \bfseries  #1\par\nobreak
    \vskip 40\p@
  }}
\makeatother
%%%% fin macro %%%%

\newlength{\plarg}
\setlength{\plarg}{14cm}
\newlength{\glarg}
\setlength{\glarg}{17cm}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{}
 %En-tête de page
 \renewcommand{\headrulewidth}{0.5pt}
\addtolength{\headheight}{15pt} % 
\lhead{\leftmark}
\chead{}
\rhead{\includegraphics[width = 20mm, scale=1]{img/univ-nantes}}

%Pieds de page
\lfoot{\textit{Projet HADL - Implémentation}}
\cfoot{\textit{\thepage}}
\rfoot{\textsc{Bizet - Chaline}}

\renewcommand{\contentsname}{Sommaire}

\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%		Page de garde		%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{titlepage}
\thispagestyle{empty}
\begin{center}
\begin{minipage}{\plarg}
\vspace{1cm} \centering
Master Alma 2 \\
2012 - 2013 \vspace{1cm}
\end{minipage}
\end{center}

\begin{center}
  \begin{minipage}{\plarg}
    \vspace{2cm} \centering
    \rule{\linewidth{}}{0.3mm}\\
    \vspace{1mm}
    {\huge Projet HADL - Implémentation}\\
    \vspace{5mm}
    {\large Architecture à base de composants}
    \rule{\linewidth{}}{0.3mm}\\
	\bsc{Bizet} Jonathan\\    
    \bsc{Chaline} Jérémy
  \end{minipage}
 \end{center}

  \begin{center}
    \begin{minipage}{\plarg}
      \vspace{2cm} \centering
    \end{minipage}
  \end{center}

  \vfill \hspace{-1cm}
\begin{minipage}[c]{0.55\linewidth}
 {\rule{\plarg}{0.5pt}}\\
    \footnotesize{Professeurs Encadrants:}\\
    \small{Mr Mourad \bsc{Oussalah}}\\		
\end{minipage} \hfill
\begin{minipage}[c]{0.40\linewidth}
   \hfill \includegraphics[width = 20mm, scale=1]{img/univ-nantes}
\end{minipage}\leftmark
\end{titlepage}
\thispagestyle{empty}
\tableofcontents
\clearpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%	Fin page de garde	%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Objectif}
\paragraph{}Notre objectif est d'implémenter une architecture Client-Server correspondant à nos méta-modèles M1 et M2 du précédant TP.
\begin{figure}[h!]
\begin{center}
\includegraphics[scale=0.45]{img/ClientServer}
\label{Schema_ClientServeur}
\caption{Architecture Client--Serveur}
\end{center}
\end{figure}
\begin{enumerate}
	\item Pour commencer, une implémentation du niveau \textit{M2}, méta-modèle à respecter pour construire le modèle.
	\item Ensuite, une implémentation du niveau \textit{M1}, en réutilisant les classes du \textit{M2}, afin de créer tous les composants nécessaires.
	\item Et pour finir, une instanciation du \textit{M1}, correspondant au \textit{M0}, qui correspond à un exemple d'utilisation de notre architecture : demande de connection, authentification, puis retour d'une donnée issue de la base de donnée.
\end{enumerate}

\clearpage
\newpage

\section{Choix d'implémentation}

\subsection{Niveau M2}
L'implémentation du niveau M2 définit de manière générique les composants et leur intéraction (branchement des ports et des services).
La plupart des classes sont abstraite et nécessite une implémentation concrête pour être utilisées.

\subsection{Niveau M1}
\paragraph{}Pour gérer les transmissions de message entre les composants, nous avons choisis d'utiliser le \textbf{pattern Observer}, qui se compose de deux parties :
\begin{itemize}
	\item La partie \textbf{Observer} qui capture les évènements en provenance des classes observées.	
	\item La partie \textbf{Observable} qui notifie à ses observateurs qu'elle vient d'être modifié, c'est à dire, dans notre cas, qu'un message doit être transmis.
\end{itemize}
\paragraph{}Les ports fournis envois un message vers leur \textit{attachement}. Ils sont donc définit en tant qu'\textbf{Observable}, et l'attachment en tant qu'\textbf{Observer}.
Les Port Requis recoivent un message de l'\textit{attachment}, ce sont donc des observateurs, et leur attachements des \textit{Observer}.

Afin de factoriser au mieux le code, chaque composant hérite de la classe \textbf{Element}, qui étends \textbf{Observable} et implémente \textbf{Observer}.

\paragraph{}Il est à noter que les trois entités principales de notre architecture (Client, RPC, Serveur) sont implémentés dans trois threads différents, afin de simuler l'execution en parallèle des composants.\\
Le M0 correspond donc à trois classes plus une pour les instancier toute : ApplicationClient, ApplicationRPC, ApplicationServeur créées donc respectivement le client, le rpc, et le serveur. Application se charge d'instancier les trois autres et de réaliser les attachements entre les composants.\\
Avec l'utilisation d'un protocole réseau tel que RMI, il serait possible de connecter/deconnecter des clients à la volé.

\clearpage
\newpage

% revoir le titre
\section{Choix de scénario}
\paragraph{}Afin de tester notre implémentation nous avons décidé d'établir un scénario simple permettant de visualiser les intéractions entre les composants et le fonctionnement de notre architecture :
\begin{enumerate}
	\item Le client envoie son identifiant au RPC
	\item Le RPC transmet l'identifiant au port de la configuration
	\item Grâce au binding, qui écoute le port de la configuration, l'identifiant est transmit vers le port du Connection Manager.
	\item L'identifiant passe ensuite au Security Manager par le biais du Clearance Request.
	\item Le Security Manager détermine si les données envoyés par le Client sont valides, puis il intéroge la base de donnée pour savoir si ce client peut effectuer sa requête.
	\item La base de donnée répond positivement, et informe le Security Manger.
	\item Le Security Manager préviend le Connection Manager que Client peut effectuer sa requête.
	\item Le Connection Manager effectue la requête sur la base de donnée, la base de donné répond, et grâce au Binding, le Connection Manager renvoie les données au RPC.
	\item Et pour finir, les données sont transmisent au client, qui peut les afficher.
\end{enumerate}

\section{Conclusion}
%Ce projet nous a permis de mettre en pratique les notions vues en cours. Il nous a permis de verifier en  que effectivement 
%Le modèle académique était riche sémantique car en effet pour ce projet nous avais du gérer près u
\paragraph{}Malgrès la mise en oeuvre complexe de l'architecture, du fait de notre choix de spécifier chaque composant alors que nous aurions pu choisir d'utiliser des classes du M2, il devient assez simple de rajouter un composant quand l'architecture est en place.
\\
Une grande partie du code étant similaire d'un composant à l'autre, il est intéressant de générer automatiquement le code des composant et les classes nécessaires (Binding, Services, Ports ...) pour ensuite ajuster à la main les traitements spécifiques, que ce soit avec un outils type MDE où un script.
\end{document}